/**
 * 
 */
package com.hbt.chat.logica;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JFrame;

import com.hbt.chat.gui.GUIServidor;

/**
 * @author svelandia
 *
 */
public class Servidor {
	
	 private static ServerSocket servidor; //
	 private static Socket conexion; //Socket para conectarse con el cliente
	 private static String ip = "172.20.8.88"; //ip a la cual se conecta
	 
	 public Servidor() {
		 GUIServidor main = new GUIServidor(); //Instanciacion de la clase Principalchat
	        main.setLocationRelativeTo(null);   //Centrar el JFrame
	        main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //habilita cerrar la ventana
	        ExecutorService executor = Executors.newCachedThreadPool(); //Para correr los threads
	 
	        try {
	            //main.mostrarMensaje("No se encuentra Servidor");
	            servidor = new ServerSocket(8080, 100); 
	            main.mostrarMensaje("Esperando Cliente ...");

	            //Bucle infinito para esperar conexiones de los clientes
	            while (true){
	                try {
	                    conexion = servidor.accept(); //Permite al servidor aceptar conexiones        

	                    //main.mostrarMensaje("Conexion Establecida");
	                    main.mostrarMensaje("Conectado a : " + conexion.getInetAddress().getHostName());

	                    main.habilitarTexto(true); //permite escribir texto para enviar

	                    //Ejecucion de los threads
	                    executor.execute(new ThreadRecibeServidor(conexion, main)); //client
	                    executor.execute(new ThreadEnviaServidor(conexion, main));
	                } catch (IOException ex) {
	                    Logger.getLogger(GUIServidor.class.getName()).log(Level.SEVERE, null, ex);
	                }
	            }
	        } catch (IOException ex) {
	            Logger.getLogger(GUIServidor.class.getName()).log(Level.SEVERE, null, ex);
	        } //Fin del catch
	        finally {
	        }
	        executor.shutdown();
	}
	 
	 public static void main(String[] args) {
		new Servidor();
	}
}
